package main

import (
	"encoding/json"
	"fmt"
	"github.com/golang/protobuf/proto"
	"learn_grpc/2_grpc/proto"
)

// 字段也要为公共的，首字母大写，不然序列化时数据为空
type Hello struct {
	Name   string   `json:"name"`
	Age    int      `json:"age"`
	Course []string `json:"course"`
}

func main() {
	// 使用生产的结构体
	req := helloworld.HelloRequest{
		Name:     "jiang",
		Age:      20,
		Coourses: []string{"go", "gin"},
	}
	//proto进行序列化
	rsp, _ := proto.Marshal(&req) //具体编码原理，可以百度protobuf的原理
	fmt.Println(len(rsp))
	//json进行序列化测试
	data2 := Hello{
		Name:   "jiang",
		Age:    20,
		Course: []string{"go", "gin"},
	}
	rsp2, _ := json.Marshal(data2)
	fmt.Println(len(rsp2))
	/*可以看到json序列化的长度是proto的2倍，所有说proto的压缩更好*/
	//测试反序列化
	Newreq := helloworld.HelloRequest{}
	_ = proto.Unmarshal(rsp, &Newreq) //前面一个是序列化的值，后的是存储的地方
	fmt.Println(Newreq.Name, Newreq.Age, Newreq.Coourses)
}
